import 'package:get/get.dart';
import 'package:raze/lore/glyph/follow_bond.dart';

/// 关注关系状态管理
/// 全局关注关系状态，提供关注、取消关注、查询等功能
class FollowChronicle extends GetxController {
  // 所有关注关系列表
  final _followList = <FollowBond>[].obs;

  /// 获取所有关注关系列表
  List<FollowBond> get followList => _followList;

  @override
  void onInit() {
    super.onInit();
    _initializeDefaultFollows();
  }

  /// 初始化默认关注数据
  /// 围绕 admin 用户（id='1'）创建关注关系
  void _initializeDefaultFollows() {
    _followList.value = [
      // admin 关注 user002 (Grace)
      FollowBond(followerId: '1', followingId: '2'),
      // admin 关注 user003 (Piper)
      FollowBond(followerId: '1', followingId: '3'),
      // admin 关注 user004 (Daisy)
      FollowBond(followerId: '1', followingId: '4'),
      // admin 关注 user005 (Ethan)
      FollowBond(followerId: '1', followingId: '5'),
      // user002 关注 admin
      FollowBond(followerId: '2', followingId: '1'),
      // user003 关注 admin
      FollowBond(followerId: '3', followingId: '1'),
    ];
  }

  /// 关注用户
  /// [followerId] 关注者的用户ID
  /// [followingId] 被关注者的用户ID
  /// 返回关注结果，成功返回true，失败返回false（已关注或自己关注自己）
  bool establishFollow(String followerId, String followingId) {
    // 不能自己关注自己
    if (followerId == followingId) {
      return false;
    }

    // 检查是否已关注
    final exists = _followList.any(
      (bond) =>
          bond.followerId == followerId && bond.followingId == followingId,
    );

    if (exists) {
      return false; // 已关注
    }

    // 创建关注关系
    final newBond = FollowBond(
      followerId: followerId,
      followingId: followingId,
    );

    _followList.add(newBond);
    return true;
  }

  /// 取消关注
  /// [followerId] 关注者的用户ID
  /// [followingId] 被关注者的用户ID
  /// 返回取消关注结果，成功返回true，失败返回false（未关注）
  bool dissolveFollow(String followerId, String followingId) {
    final index = _followList.indexWhere(
      (bond) =>
          bond.followerId == followerId && bond.followingId == followingId,
    );

    if (index == -1) {
      return false; // 未关注
    }

    _followList.removeAt(index);
    return true;
  }

  /// 检查是否关注
  /// [followerId] 关注者的用户ID
  /// [followingId] 被关注者的用户ID
  /// 返回是否已关注
  bool checkIsFollowing(String followerId, String followingId) {
    return _followList.any(
      (bond) =>
          bond.followerId == followerId && bond.followingId == followingId,
    );
  }

  /// 获取用户的关注列表（我关注的人）
  /// [userId] 用户ID
  /// 返回该用户关注的所有用户ID列表
  List<String> fetchFollowingList(String userId) {
    return _followList
        .where((bond) => bond.followerId == userId)
        .map((bond) => bond.followingId)
        .toList();
  }

  /// 获取用户的粉丝列表（关注我的人）
  /// [userId] 用户ID
  /// 返回关注该用户的所有用户ID列表
  List<String> fetchFollowerList(String userId) {
    return _followList
        .where((bond) => bond.followingId == userId)
        .map((bond) => bond.followerId)
        .toList();
  }

  /// 获取用户的关注数量（我关注的人数）
  /// [userId] 用户ID
  /// 返回关注数量
  int countFollowing(String userId) {
    return _followList.where((bond) => bond.followerId == userId).length;
  }

  /// 获取用户的粉丝数量（关注我的人数）
  /// [userId] 用户ID
  /// 返回粉丝数量
  int countFollowers(String userId) {
    return _followList.where((bond) => bond.followingId == userId).length;
  }
}
